package com.cskaoyan.javase.oop1._3memory;

/**
 * 三个对象的内存图，其中有两个引用指向同一个对象。
 *
 * 对象中成员变量的赋值，包括赋值手段，赋值顺序，赋值结果：
 * 目前我们已知的在new对象过程中，给对象中的成员变量赋值的手段有：
 *      1.默认初始化，具有默认值
 *      2.显式赋值
 * 很明显,以上两种赋值方式,默认初始化永远最先进行
 * 显式赋值是在默认初始化的基础上完成的,显式赋值会覆盖默认值!
 *
 * 除此之外,用"对象名."给成员变量赋值,是创建对象完毕后,给成员变量的赋值手段
 * 所以它一定会覆盖掉new对象过程中的赋值.
 *
 * @since 10:03
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        Teacher t1 = new Teacher();
        System.out.println(t1.salary);
        System.out.println(t1.name);
        // 创建对象完毕后的赋值手段
        t1.salary = 10000;
        System.out.println(t1.salary);

        Teacher t2 = t1;
        Teacher t3 = new Teacher();

        System.out.println(t1 == t2);
        System.out.println(t1 == t3);
    }
}

class Teacher {
    /*
        在成员变量的声明的同时
        直接用等号给出一个初始值
        这种赋值方式称之为"显式赋值"
        显式赋值就是在定义成员变量时,直接给出一个初始值
     */
    double salary = 100000;
    String name = "长风";

    public void teach() {
        System.out.println("老师正在上课!");
    }
}